package ft.ess.util;

import java.io.File;
import java.util.List;

public class FileUtil
{
//	public static void main(String[] args)
//	{
//		String a = "c:\\abc\\fdfd";
//		String b = "def";
//		String c= pathAddFile(a,b);
//		System.out.println(a);
//		System.out.println(b);
//		System.out.println(c);
//	}
	
	/**
	 * 在路径 p 的后面附加上另一个路径（可以是路径，也可以是文件）<br />
	 * 根据 p 最后是否有路径分隔符来进行添加，如果有则不添加，如果没有则添加。
	 * @param p
	 * @param f
	 * @return
	 */
	public static String pathAddFile(String p, String f)
	{
		StringBuffer sb = new StringBuffer();
		
		if(p!=null && p.length()>0 && f!=null && f.length()>0)
		{
			sb.append(p);
			if(p.charAt(p.length()-1)!='/' && p.charAt(p.length()-1)!='\\')
			{
				sb.append('/');
			}
			
			if(f.charAt(0)!='/' && f.charAt(0)!='\\')
			{
				sb.append(f);
			}
			else
			{
				sb.append( f.substring(1) );
			}
			
		}
		
		return sb.toString();
	}
	
//	public static void main(String[] args) {
//		String p = "/abc/1234-5678/avd/download/12345678/1/2/json.xml";
//		String b = "/abc";
//		
//		String f = getFileNameInBasePath(p,b);
//		
//		System.out.println(p);
//		System.out.println(b);
//		System.out.println(f);
//	}
	
	/**
	 * 
	 * @param p
	 * @param base 以该路径作为基础
	 * @return
	 */
	public static String getFileNameInPath(String p, String base)
	{
		String ret = "";
		
		if(base!=null && base.length()>0)
		{
			if(p!=null && p.length()>0)
			{
				int ll = 0;
				ll = p.lastIndexOf(base);
				if(ll!=-1)
				{
					// 如果找到了，截取 base 以后的部分（不包含 base 本身）
					ret = p.substring(ll+base.length());
				}
				else
				{
					// 如果没找到，不截取，直接返回。
					ret = p;
				}
			}
		}
		else
		{
			ret = getFileNameInPath(p);
		}
		
		return ret;
	}
	
	/**
	 * 
	 * @param p
	 * @param base 以该路径作为基础
	 * @return
	 */
	public static String getFileNameInPath(String p, List<String> base)
	{
		String ret = "";
		
		String base0 = null;
		boolean flagfound = false;
		
		for(int baseidx = 0;baseidx < base.size() && flagfound == false; baseidx++)
		{
			base0 = base.get(baseidx);
			
			if(base!=null && base0.length()>0)
			{
				if(p!=null && p.length()>0)
				{
					int ll = 0;
					ll = p.lastIndexOf(base0);
					if(ll!=-1)
					{
						flagfound = true;
						// 如果找到了，截取 base 以后的部分（不包含 base 本身）
						ret = p.substring(ll+base0.length());
					}
					else
					{
						// 如果没找到，不截取，直接返回。
						ret = p;
					}
				}
			}
			else
			{
				ret = getFileNameInPath(p);
			}
		}
		return ret;
	}
	
	/**
	 * 从完全路径中取得文件名
	 * @param p
	 * @return
	 */
	public static String getFileNameInPath(String p)
	{
		String ret = "";
		
		if(p!=null && p.length()>0)
		{
			int ll = 0;
			ll= p.lastIndexOf("/");
			if(ll!=-1)
			{
				ret = p.substring(ll+1);
				
			}
		}
		
		return ret;
	}
	
//	public static void main(String[] args) {
//		String a = "c:/abde/def/fg";
//		String b = getFileNameInPath(a);
//		System.out.println(a);
//		System.out.println(b);
//		
//	}
	
	/**
	 * 如果 path 存在，且是目录，返回 1<br />
	 * 如果 path 不存在，返回 0<br />
	 * 如果 path 存在，且是文件，返回 -1
	 * @param path
	 * @return
	 */
	public static int checkDir(String path)
	{
		int r = -1;
		
		if(path!=null && path.length()>0)
		{
			File f = null;
			try
			{
				f= new File(path);
				
				if(f!=null )
				{
					if(f.exists())
					{
						if(f.isDirectory())
						{
							// 存在，且是目录
							r = 1;
						}
						else if(f.isFile())
						{
							// 存在，且是文件
						}
						
					}
					else
					{
						// 该路径不存在
						r = 0;
					}
					
				}
			}
			catch(Exception ex)
			{
				
			}
			
			
		}
		
		return r;
	}
	
	public static boolean validateDirPath(String path)
	{
		boolean b = false;
		
		if(path!=null && path.length()>0)
		{
			File f = null;
			try
			{
				f = new File(path);
				
				b = f.mkdirs();
				
			}
			catch(Exception ex)
			{
				
			}
		}
		
		return b;
	}
	
//	public static void echoCheckDir(String a)
//	{
//		File f = new File(a);
//		System.out.println(f.exists());
//		System.out.println(f.isDirectory());
//		System.out.println(f.isFile());
//		System.out.println(f.canRead());
//		System.out.println(f.canWrite());
//		
//	}
	
//	public static void main(String[] args) {
//		String a = "D:/svnlog.txt";
//		a= "D:\\TEMP";
//		//int r = checkDir(a);
//		echoCheckDir(a);
//		//System.out.println(r);
//	}
	
	public static final void ensureParentPath(String p)
	{
		if(p!=null && p.length()>0)
		{
			File f = new File(p);
			if(f!=null)
			{
				File fp = f.getParentFile();
				if(fp!=null && false==fp.exists())
				{
					fp.mkdirs();
				}
			}
		}
	}
	
	/**
	 * 将反斜杠 \ 转换为正斜杠 / 后的值
	 * @param opath
	 * @return
	 */
	public static final String convertBs2Slash(String opath)
	{
		String ret = "";
		
		
		if(opath!=null && opath.length()>0)
		{
			StringBuffer sb = new StringBuffer(opath.length());
			int ch;
			
			for(int i=0; i<opath.length(); i++)
			{
				ch = opath.charAt(i);
				
				if(ch=='\\')
				{
					ch = '/';
				}
				
				sb.append( (char)ch );
			}
			
			if(sb!=null && sb.length()>0)
			{
				ret = sb.toString();
			}
		}
		
		return ret;
	}
	
	public static void main(String[] args) {
		String o = "E:\\啊啊啊/测试\\文件路径.docx";
		String b = convertBs2Slash(o);
		
		System.out.println(o);
		System.out.println(b);
	}
}
